package com.coco.thread.start;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 创建线程方式三  接口 Callable 和 类FutureTask 实现带有返回值的线程
 */
public class WayThread03 {

    public static void main(String[] args) {
        Callable<Integer> myCallable = new MyCallable();// 创建MyCallable对象
        FutureTask<Integer> ft = new FutureTask<Integer>(myCallable); //使用FutureTask来包装MyCallable对象
        Thread thread = new Thread(ft);   //FutureTask对象作为Thread对象的target创建新的线程
        thread.start();                      //线程进入到就绪状态

        System.out.println("主线程for循环执行完毕..");
        try{
            int sum = ft.get();  //取得新创建的新线程中的call()方法返回的结果
            System.out.println("sum = " + sum);
        }catch (InterruptedException e){
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
    public static class MyCallable implements Callable<Integer> {
        private int i = 0;

        // 与run()方法不同的是，call()方法具有返回值
        public Integer call() throws InterruptedException {
            int sum = 11;
            //如果没有标记为退出指令，则继续执行
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getName());
                return sum;
            }
    }

}
